package leetcode.editor.cn;

/**
 * @Author: Dempsey
 * @Data: 2021-03-12 11:25:26
 */

//给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。 
//
// 说明：本题中，我们将空字符串定义为有效的回文串。 
//
// 示例 1: 
//
// 输入: "A man, a plan, a canal: Panama"
//输出: true
// 
//
// 示例 2: 
//
// 输入: "race a car"
//输出: false
// 
// Related Topics 双指针 字符串 
// 👍 347 👎 0


public class P125 {
    public static void main(String[] args) {
        Solution solution = new P125().new Solution();
        solution.isPalindrome("0P");
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public boolean isPalindrome(String s) {
            if (s.length() == 0) return true;

            char[] chars = s.toCharArray();

            int head = 0;
            int tail = s.length() - 1;

            while (head < tail) {
                if (!isNumOrCharactor(chars[head])) {
                    head++;
                    continue;
                }
                if (!isNumOrCharactor(chars[tail])) {
                    tail--;
                    continue;
                }
                if (chars[head] == chars[tail] ||
                        (isCharactor(chars[head]) && isCharactor(chars[tail]) && Math.abs(chars[head] - chars[tail]) == 32)) {
                    head++;
                    tail--;
                } else {
                    return false;
                }
            }

            return true;
        }

        private boolean isNumOrCharactor(char ch) {
            if (48 <= ch && ch <= 57) {
                return true;
            }
            if (65 <= ch && ch <= 90) {
                return true;
            }
            if (97 <= ch && ch <= 122) {
                return true;
            }
            return false;
        }

        private boolean isCharactor(char ch) {
            if (65 <= ch && ch <= 90) {
                return true;
            }
            if (97 <= ch && ch <= 122) {
                return true;
            }
            return false;
        }

    }
//leetcode submit region end(Prohibit modification and deletion)

}